【祝GA】EKS ConnectorでGKE上のKubernetesクラスターをEKSのコンソールに表示してみた
MAD事業部@大阪の岩田です。以前からプレビューリリースされていたEKS Connectorが先日ついにGAされました。
ということで記念にEKS Connectorを使ってGKE上のKubernetesクラスターをEKSのマネコンに表示してみました
やってみる
ということで早速やっていきます。KubernetesクラスターをEKSに登録する選択肢としてAWS CLIやマネコンからの操作が挙げられますが、今回はeksctlを使ってみます。eksctlは現時点での最新版0.74.0を利用しています。
$ eksctl version 0.74.0
ドキュメントの記述だとeksctl0.68以上のバージョンであれば良さそうなのですが、プレビューリリース~GAまでに発生した変更を考慮すると最新版にバージョンを上げておくのが無難だと思います。
GKEでクラスターを作成
まずはEKS Connectorを使って登録するためのKubernetesクラスターをGKE上に作成します。特に変わったことはせずデフォルト設定のままサクっと作成してしまいましょう。
EKS connectorエージェント用IAMロールの作成
続いて以下ドキュメントの手順に従い、EKS Connectorを利用するために必要なIAMロールを作成します。
https://docs.aws.amazon.com/eks/latest/userguide/connector_IAM_role.html
まずはeks-connector-agent-trust-policy.json
というファイル名で以下のJSONファイルを用意し
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SSMAccess", "Effect": "Allow", "Principal": { "Service": [ "ssm.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
JSONファイルを元にIAMロールを作成します
$aws iam create-role \ --role-name AmazonEKSConnectorAgentRole \ --assume-role-policy-document file://eks-connector-agent-trust-policy.json
続いてeks-connector-agent-policy.json
というファイル名で以下のJSONファイルを用意し
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SsmControlChannel", "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel" ], "Resource": "arn:aws:eks:*:*:cluster/*" }, { "Sid": "ssmDataplaneOperations", "Effect": "Allow", "Action": [ "ssmmessages:CreateDataChannel", "ssmmessages:OpenDataChannel", "ssmmessages:OpenControlChannel" ], "Resource": "*" } ] }
先程作成したIAMロールにポリシーを設定します
$aws iam put-role-policy \ --role-name AmazonEKSConnectorAgentRole \ --policy-name AmazonEKSConnectorAgentPolicy \ --policy-document file://eks-connector-agent-policy.json
これでGKEのクラスターを登録する準備ができました。
GKEのクラスターをEKSに登録
続いてeksctlでGKEのクラスターをEKSに登録します。
$ eksctl register cluster --name gke-cluster --provider GKE 2021-11-23 21:08:16 [ℹ] creating IAM role "eksctl-20211123210816248554" 2021-11-23 21:08:30 [ℹ] registered cluster "gke-cluster" successfully 2021-11-23 21:08:30 [ℹ] wrote file eks-connector.yaml to /Users/iwata.tomoya/Documents/xxxxx 2021-11-23 21:08:30 [ℹ] wrote file eks-connector-clusterrole.yaml to /Users/iwata.tomoya/Documents/xxxxx 2021-11-23 21:08:30 [ℹ] wrote file eks-connector-console-dashboard-full-access-group.yaml /Users/iwata.tomoya/Documents/xxxxx 2021-11-23 21:08:30 [!] note: "eks-connector-clusterrole.yaml" and "eks-connector-console-dashboard-full-access-group.yaml" give full EKS Console access to IAM identity "arn:aws:iam::123456789012:user/hogehoge", edit if required; read https://docs.aws.amazon.com/eks/latest/userguide/connector-grant-access.html for more info 2021-11-23 21:08:30 [ℹ] run `kubectl apply -f eks-connector.yaml,eks-connector-clusterrole.yaml,eks-connector-console-dashboard-full-access-group.yaml` before 26 Nov 21 12:08 UTC to connect the cluster
コマンドが完了すると
- eks-connector.yaml
- eks-connector-clusterrole.yaml
- eks-connector-console-dashboard-full-access-group.yaml
3つのYAMLファイルが生成されます
この段階でEKSのコンソールを確認すると先程登録したGKEのクラスタが「保留中」状態で表示されていることが分かります
最後に出力されたメッセージに従ってGKE環境でkubectl apply
を順番に叩いていきます。
まずはGKEに構築したクラスタのクレデンシャル情報を取得
$ gcloud container clusters get-credentials <GKE上に作成したクラスタの名前> --region=asia-northeast1-a Fetching cluster endpoint and auth data. kubeconfig entry generated for cluster-for-eks.
kubectl
コマンドが叩けることを確認しておきましょう
$ kubectl get nodes NAME STATUS ROLES AGE VERSION gke-cluster-for-eks-default-pool-0f0324c4-78b6 Ready <none> 20m v1.21.5-gke.1302 gke-cluster-for-eks-default-pool-0f0324c4-cvxg Ready <none> 20m v1.21.5-gke.1302 gke-cluster-for-eks-default-pool-0f0324c4-t8b5 Ready <none> 20m v1.21.5-gke.1302
後はまとめてkubectl apply
を実行します
$ kubectl apply -f eks-connector.yaml,eks-connector-clusterrole.yaml,eks-connector-console-dashboard-full-access-group.yaml namespace/eks-connector created secret/eks-connector-activation-config created role.rbac.authorization.k8s.io/eks-connector-secret-access created serviceaccount/eks-connector created secret/eks-connector-token created rolebinding.rbac.authorization.k8s.io/eks-connector-secret-access created configmap/eks-connector-agent created statefulset.apps/eks-connector created clusterrolebinding.rbac.authorization.k8s.io/eks-connector-service created clusterrole.rbac.authorization.k8s.io/eks-connector-service created clusterrole.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole created clusterrolebinding.rbac.authorization.k8s.io/eks-connector-console-dashboard-full-access-clusterrole-binding created
登録が終わるとEKSのマネコンから色々な情報が見れるようになります
まとめ
大規模な環境出ない限りはEKS Connectorを使う機会は無いと思いますが、せっかくの機会なので試してみました。色んな環境にデプロイされたKubernetes環境がEKSのマネコンからまとめて確認できて面白かったです。